package com.kyist.frp.utils;

import java.util.Collections;
import java.util.List;
import java.util.Objects;

public class IpUtils {

    /**
     * 验证IP是否属于某个IP段 分支
     * ipSection IP段(以'-'分隔)
     * ip 所验证的IP号码
     */
    public static boolean ipExistsInRange(String ip,String ipSection) {
        //匹配相等直接返回
        if (Objects.equals(ip,ipSection)) return true;

        ipSection = ipSection.trim();

        ip = ip.trim();

        int idx = ipSection.indexOf('-');

        String beginIP = ipSection.substring(0, idx);

        String endIP = ipSection.substring(idx + 1);

        return getIp2long(beginIP)<=getIp2long(ip) && getIp2long(ip)<=getIp2long(endIP);

    }

    public static long getIp2long(String ip) {

        ip = ip.trim();

        String[] ips = ip.split("\\.");

        long ip2long = 0L;

        for (int i = 0; i < 4; ++i) {

            ip2long = ip2long << 8 | Integer.parseInt(ips[i]);

        }

        return ip2long;

    }

    public static long getIp2long2(String ip) {

        ip = ip.trim();

        String[] ips = ip.split("\\.");

        long ip1 = Integer.parseInt(ips[0]);

        long ip2 = Integer.parseInt(ips[1]);

        long ip3 = Integer.parseInt(ips[2]);

        long ip4 = Integer.parseInt(ips[3]);

        return ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;
    }

    /**
     * 判断ip是否在列表中
     * @param ip 目标ip
     * @param ips ip列表
     * @return bool
     */
    public static boolean checkIpInList(String ip, List<String> ips){

        if (ips.isEmpty()) return false;

        for (String s : ips) {

            if (ipExistsInRange(ip, s)) {
                return true;
            }
        }
        return false;
    }


    public static void main(String[] args){
        System.out.println(getIp2long("127.123.123.23"));
    }

}
